package cn.wolfcode.shop.util;

import cn.wolfcode.shop.util.Consts;
import lombok.Getter;

/**
 * 统一 Redis中的常量管理
 **/

@Getter
public enum RedisKeys {
    SECKILL_VIREFY_CODE("seckill_virefy_code", Consts.VERIFY_CODE_VAI_TIME * 60L),//秒杀验证的key 时效5分钟
    RANDOM_IN_PATH("random_in_path", 3L), // 有效时间3s

    SECKILL_SUCCESS_USER_SET("seckill_success_user_set", -1L),

    SECKILL_GOOD_STOCKCOUNT_HASH("seckill_good_stockcount_hash", -1L),// 不设置有效时间，可以将时效设置为秒杀结束的时间

    SECKILL_GOOD_HASH("seckill_good_hash", -1L),
    //urlAPI接口防刷
    BRUSH_PROOF("brush_proof", 60L),//有效时间 60s

    //短信频率限制的key
    SEND_COUNT("send_count", Consts.VERIFY_CODE_VAI_TIME * 60L),//有效时间5分钟

    //用户登录后保存用户信息的key
    USER_LOGIN_TOKEN("user_login_token", Consts.USER_INFO_TOKEN_VAL_TIME * 60L),//有效时间30分钟

    //验证短信时，存储验证码的key
    VERIFY_CODE("verify_code", Consts.VERIFY_CODE_VAI_TIME * 60L);//有效时间5分钟

    private String prefix;  //Redis的key前缀
    private Long time;      //redis的key有效时间，单位是 s

    //构造器：创建验证码的key前缀常量
    private RedisKeys(String prefix, Long time) {
        this.prefix = prefix;
        this.time = time;
    }

    //拼接Redis的key
    /*public String join(String value){
        StringBuilder sb = new StringBuilder();
        sb.append(this.prefix).append(":").append(value);
        return sb.toString();
    } */

    //verify_code:xxx:xxx:xxx:xxx
    public String join(String... values) {
        StringBuilder sb = new StringBuilder();
        sb.append(this.prefix);
        for (String v : values) {
            sb.append(":").append(v);
        }
        return sb.toString();
    }

}
